﻿using System;
using System.Collections.Generic;

namespace SharedTypes
{
    /// <summary>
    /// Интерфейс алгоритма адаптации параметров.
    /// </summary>
    public interface IAdoptationMethod
    {
        /// <summary>
        /// Обработчик события прогресса.
        /// </summary>
        event EventHandler<ProgressEventArgs> ProgressEventHandler;

        #region Methods
        /// <summary>
        /// Запускает процесс адаптации выбранного алгоритма.
        /// </summary>
        /// <param name="alg">Адопритруемый алгоритм.</param>
        /// <param name="reportInfo">Объект отчёта.</param>
        void Adopt(IAlgorithm alg, ref ReportInformationContainer reportInfo);

         /// <summary>
        /// Запускает процесс адаптации выбранного алгоритма для файла и рекомендуемыми и найденными параметрами.
        /// </summary>
        /// <param name="alg">Адапритруемый алгоритм.</param>
        /// <param name="reportInfo">Объект отчёта.</param>
        void CompressFileByParams(IAlgorithm alg,
                                  ReportInformationContainer foundBestParameters,
                                  ref ReportInformationContainer reportCurrentFile);

        /// <summary>
        /// Устанавливает параметры алгоритма адаптации.
        /// </summary>
        /// <param name="userSettings">Список пользовательских параметров.</param>
        /// <returns>Истина, если параметры были установлены, иначе - ложь.</returns>
        bool SetParameters(List<object> userSettings);

        /// <summary>
        /// Возвращает параметры, заданные пользователем (порядок должен совпадать).
        /// </summary>
        /// <param name="userSettings">Список пользовательских параметров.</param>
        bool GetParameters(out List<object> userSettings);

        #endregion // Methods
    }
}
